#include "./model/Server.h"
#include "./model/Cliente.h"

#include <stdio.h>
#include <stdlib.h>
#include "model/Server.h"
#include "model/Cliente.h"

/**
 * Inicia el servidor listo para manejar una conversación entre participantes
 * Recibe como parametro [-d] (Modo Debug)
 */
int runServidor(int argc, char **argv) {
	Server servidor;
	servidor.activarModoDebug(argc == 2 && strcmp(argv[1], "-d") == 0);
	servidor.ejecutar();
	return 0;
}

/**
 * Inicia un participante listo para conectarse al servidor.
 * Recibe como parámetro -n <nick> [-d] (Modo Debug)
 */
int runParticipante(int argc, char **argv) {
	if (argc < 3 || (argc == 3 && strcmp(argv[1], "-n") != 0) || (argc == 4
			&& (strcmp(argv[1], "-n") != 0 || strcmp(argv[3], "-d") != 0)) ) {
		throw 201;
	}
	Cliente cliente(argv[2]);
	cliente.activarModoDebug(argc == 4 && strcmp(argv[3], "-d") == 0);
	cliente.ejecutar();
	return 0;
}

int main(int argc, char **argv) {
	int err = 0;
	try {

		if (strcmp(argv[0], "./servidor") == 0) {
			err = runServidor(argc, argv);
		} else {
			err = runParticipante(argc, argv);
		}
	} catch (int error) {
		switch (error) {
		case 201:
			cerr << "[Participante] Parametros de ejecucion invalidos" << endl;
			break;
		}
	}
	return err;
}
